package com.seecen.service;

import com.seecen.pojo.dto.TallyDto;
import com.seecen.pojo.entity.Tally;
import com.baomidou.mybatisplus.extension.service.IService;
import com.seecen.pojo.vo.BillDetailVO;
import com.seecen.pojo.vo.ChartDataVO;
import com.seecen.pojo.vo.RankingItemVO;

import java.util.List;

/**
* @author xuxin
* @description 针对表【t_tally(用户记账记录表)】的数据库操作Service
* @createDate 2025-10-16 10:19:26
*/
public interface TallyService extends IService<Tally> {

    /**
     * 获取图表数据
     * @param type 类型：expense-支出，income-收入
     * @param period 周期：week-周，month-月，year-年
     * @param userId 用户ID
     * @return 图表数据
     */
    ChartDataVO getChartData(String type, String period, Long userId);

    /**
     * 获取排行榜数据
     * @param type 类型：expense-支出，income-收入
     * @param period 周期：week-周，month-月，year-年
     * @param userId 用户ID
     * @return 排行榜数据列表
     */
    List<RankingItemVO> getRankingData(String type, String period, Long userId);

    /**
     * 获取指定月份的账单明细
     * @param year 年份
     * @param month 月份
     * @param accountId 账本ID（可选，不传则查询所有账本）
     * @param userId 用户ID
     * @return 账单明细数据
     */
    BillDetailVO getBillDetail(Integer year, Integer month, Long accountId, Long userId);

    /**
     * 保存记账记录
     * @param tallyDto 记账DTO
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean saveTallyByDto(TallyDto tallyDto, Long userId);

    /**
     * 更新记账记录
     * @param id 记账记录ID
     * @param tallyDto 记账DTO
     * @param userId 用户ID（用于权限验证）
     * @return 是否成功
     */
    boolean updateTallyByDto(Long id, TallyDto tallyDto, Long userId);

    /**
     * 删除记账记录（逻辑删除）
     * @param id 记账记录ID
     * @param userId 用户ID（用于权限验证）
     * @return 是否成功
     */
    boolean deleteTallyById(Long id, Long userId);
    /**
     * 获取账户概览数据
     * @param userId 用户ID
     * @return 账户概览数据
     */
    Object getAccountOverview(Long userId);
}
